<!DOCTYPE html>

































































<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" type="image/x-icon" href="../../../favicon.ico" />
<title>Near Field Communication | Android Developers</title>
<link href="../../../assets/android-developer-docs-devguide.css" rel="stylesheet" type="text/css" />
<script src="../../../assets/search_autocomplete.js" type="text/javascript"></script>
<script src="../../../assets/jquery-resizable.min.js" type="text/javascript"></script>
<script src="../../../assets/android-developer-docs.js" type="text/javascript"></script>
<script src="../../../assets/prettify.js" type="text/javascript"></script>
<script type="text/javascript">
  setToRoot("../../../");
</script>
<noscript>
  <style type="text/css">
    html,body{overflow:auto;}
    #body-content{position:relative; top:0;}
    #doc-content{overflow:visible;border-left:3px solid #666;}
    #side-nav{padding:0;}
    #side-nav .toggle-list ul {display:block;}
    #resize-packages-nav{border-bottom:3px solid #666;}
  </style>
</noscript>
</head>
<body class="gc-documentation">

  <div id="header">
      <div id="headerLeft">
          <a href="../../../index.html" tabindex="-1"><img
              src="../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
          <ul id="header-tabs" class="guide">
    
	<li id="home-link"><a href="../../../offline.html">
	
		<span class="en">Home</span>
		<span style="display:none" class="de">Startseite</span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
		<span style="display:none" class="ja">ホーム</span>
		<span style="display:none" class="zh-CN">主页</span>
		<span style="display:none" class="zh-TW">首頁</span>
	
	</a></li>
	<li id="sdk-link"><a href="../../../sdk/index.html">
		<span class="en">SDK</span>
	</a></li>
	<li id="guide-link"><a href="../../../guide/index.html" onClick="return loadLast('guide')">
	
		<span class="en">Dev Guide</span>
		<span style="display:none" class="de">Handbuch</span>
		<span style="display:none" class="es">Guía</span>
		<span style="display:none" class="fr">Guide</span>
		<span style="display:none" class="it">Guida</span>
		<span style="display:none" class="ja">開発ガイド</span>
		<span style="display:none" class="zh-CN">开发人员指南</span>
		<span style="display:none" class="zh-TW">開發指南</span>
	
	</a></li>
	<li id="reference-link"><a href="../../../reference/packages.html" onClick="return loadLast('reference')">
	
		<span class="en">Reference</span>
		<span style="display:none" class="de">Referenz</span>
		<span style="display:none" class="es">Referencia</span>
		<span style="display:none" class="fr">Référence</span>
		<span style="display:none" class="it">Riferimento</span>
		<span style="display:none" class="ja">リファレンス</span>
		<span style="display:none" class="zh-CN">参考</span>
		<span style="display:none" class="zh-TW">參考資料</span>
	
	</a></li>
	<li id="resources-link"><a href="../../../resources/index.html" onClick="return loadLast('resources')">
	
		<span class="en">Resources</span>
		<span style="display:none" class="de"></span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
    		<span style="display:none" class="ja"></span>
		<span style="display:none" class="zh-CN"></span>
		<span style="display:none" class="zh-TW"></span>
	
	</a></li>
	<li id="videos-link"><a href="../../../videos/index.html" onClick="return loadLast('videos')">
	
		<span class="en">Videos</span>
		<span style="display:none" class="de"></span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
		<span style="display:none" class="ja">ビデオ</span>
		<span style="display:none" class="zh-CN"></span>
		<span style="display:none" class="zh-TW"></span>
	
	</a></li>
	<li><a href="http://android-developers.blogspot.com" onClick="return requestAppendHL(this.href)">
	
		<span class="en">Blog</span>
		<span style="display:none" class="de"></span>
		<span style="display:none" class="es"></span>
		<span style="display:none" class="fr"></span>
		<span style="display:none" class="it"></span>
		<span style="display:none" class="ja">ブログ</span>
		<span style="display:none" class="zh-CN">博客</span>
		<span style="display:none" class="zh-TW">網誌</span>
	
	</a></li>


     
</ul>
     
      </div>
      <div id="headerRight">
          <div id="headerLinks">
          
          <a href="http://www.android.com">Android.com</a>
          </div>
  <div id="search" >
      <div id="searchForm">
          <form accept-charset="utf-8" class="gsc-search-box" 
                onsubmit="return submit_search()">
            <table class="gsc-search-box" cellpadding="0" cellspacing="0"><tbody>
                <tr>
                  <td class="gsc-input">
                    <input id="search_autocomplete" class="gsc-input" type="text" size="33" autocomplete="off"
                      title="search developer docs" name="q"
                      value="search developer docs"
                      onFocus="search_focus_changed(this, true)"
                      onBlur="search_focus_changed(this, false)"
                      onkeydown="return search_changed(event, true, '../../../')"
                      onkeyup="return search_changed(event, false, '../../../')" />
                  <div id="search_filtered_div" class="no-display">
                      <table id="search_filtered" cellspacing=0>
                      </table>
                  </div>
                  </td>
                  <td class="gsc-search-button">
                    <input type="submit" value="Search" title="search" id="search-button" class="gsc-search-button" />
                  </td>
                  <td class="gsc-clear-button">
                    <div title="clear results" class="gsc-clear-button">&nbsp;</div>
                  </td>
                </tr></tbody>
              </table>
          </form>
      </div><!-- searchForm -->
  </div><!-- search -->
      </div><!-- headerRight -->
      <script type="text/javascript">
        <!--  
        changeTabLang(getLangPref());
        //-->
      </script>
  </div><!-- header -->

  <div class="g-section g-tpl-240" id="body-content">
    <div class="g-unit g-first" id="side-nav">
      <div id="devdoc-nav">
<ul>

  <li>
    <h2><span class="en">Android Basics</span>
        <span class="de" style="display:none">Einführung in Android</span>
        <span class="es" style="display:none">Información básica sobre Android</span>
        <span class="fr" style="display:none">Présentation d'Android</span>
        <span class="it" style="display:none">Nozioni di base su Android</span>
        <span class="ja" style="display:none">Android の基本</span>
        <span class="zh-CN" style="display:none">Android 基础知识</span>
        <span class="zh-TW" style="display:none">Android 簡介</span>
    </h2>
    <ul>
      <li><a href="../../../guide/basics/what-is-android.html">
        <span class="en">What Is Android?</span>
        <span class="de" style="display:none">Was ist Android?</span>
        <span class="es" style="display:none">¿Qué es Android?</span>
        <span class="fr" style="display:none">Qu'est-ce qu'Android&nbsp;?</span>
        <span class="it" style="display:none">Che cos'è Android?</span>
        <span class="ja" style="display:none">Android とは</span>
        <span class="zh-CN" style="display:none">Android 是什么？</span>
        <span class="zh-TW" style="display:none">什麼是 Android？</span>
          </a></li>
      <li><a href="../../../guide/topics/fundamentals.html">
        <span class="en">Application Fundamentals</span>
        <span class="de" style="display:none">Anwendungsgrundlagen</span>
        <span class="es" style="display:none">Fundamentos de las aplicaciones</span>
        <span class="fr" style="display:none">Principes de base des applications</span>
        <span class="it" style="display:none">Concetti fondamentali sulle applicazioni</span>
        <span class="ja" style="display:none">開発の基礎</span>
        <span class="zh-CN" style="display:none">应用程序基础</span>
        <span class="zh-TW" style="display:none">應用程式基本原理</span>
      </a></li>

  <!--  <li><a style="color:gray;">The Android SDK</a></li> -->
  <!--  <li><a style="color:gray;">Walkthrough for Developers</a></li> -->
      <!-- quick overview of what it's like to develop on Android -->
    </ul>
  </li>

  <li>
    <h2>
      <span class="en">Framework Topics</span>
      <span class="de" style="display:none">Framework-Themen</span>
      <span class="es" style="display:none">Temas sobre el framework</span>
      <span class="fr" style="display:none">Thèmes relatifs au framework</span>
      <span class="it" style="display:none">Argomenti relativi al framework</span>
      <span class="ja" style="display:none">フレームワーク トピック</span>
      <span class="zh-CN" style="display:none">框架主题</span>
      <span class="zh-TW" style="display:none">架構主題</span>
    </h2>
    <ul>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/fundamentals/activities.html">
          <span class="en">Activities</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/topics/fundamentals/fragments.html">
            <span class="en">Fragments</span>
          </a></li>
          <li><a href="../../../guide/topics/fundamentals/loaders.html">
            <span class="en">Loaders</span>
          </a></li>
          <li><a href="../../../guide/topics/fundamentals/tasks-and-back-stack.html">
            <span class="en">Tasks and Back Stack</span></a></li>
        </ul>
      </li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/fundamentals/services.html">
          <span class="en">Services</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/topics/fundamentals/bound-services.html">
            <span class="en">Bound Services</span>
          </a></li>
        </ul>
      </li>
      <li><a href="../../../guide/topics/providers/content-providers.html">
            <span class="en">Content Providers</span>
          </a></li>
      <li><a href="../../../guide/topics/intents/intents-filters.html">
            <span class="en">Intents and Intent Filters</span>
          </a></li>
      <li><a href="../../../guide/topics/fundamentals/processes-and-threads.html">
            <span class="en">Processes and Threads</span>
          </a></li>
    </ul>


    <ul>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/ui/index.html">
            <span class="en">User Interface</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/topics/ui/declaring-layout.html">
               <span class="en">XML Layouts</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/ui-events.html">
                <span class="en">Input Events</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/menus.html">
               <span class="en">Menus</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/actionbar.html">
               <span class="en">Action Bar</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/dialogs.html">
                <span class="en">Dialogs</span>
              </a></li>
          <li class="toggle-list">
            <div><a href="../../../guide/topics/ui/notifiers/index.html">
                <span class="en">Notifications</span>
            </a></div>
            <ul>
              <li><a href="../../../guide/topics/ui/notifiers/toasts.html">
                <span class="en">Toast Notifications</span>
              </a></li>
              <li><a href="../../../guide/topics/ui/notifiers/notifications.html">
                <span class="en">Status Bar Notifications</span>
              </a></li>
            </ul>
          </li>
          <li><a href="../../../guide/topics/ui/drag-drop.html">
                <span class="en">Drag and Drop</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/themes.html">
                <span class="en">Styles and Themes</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/custom-components.html">
                <span class="en">Custom Components</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/binding.html">
                <span class="en">Binding to Data with AdapterView</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/layout-objects.html">
                <span class="en">Common Layout Objects</span>
              </a></li>
          <li><a href="../../../guide/topics/ui/how-android-draws.html">
                <span class="en">How Android Draws Views</span>
              </a></li>
        </ul>
      </li><!-- end of User Interface -->

      <li class="toggle-list">
        <div><a href="../../../guide/topics/resources/index.html">
               <span class="en">Application Resources</span>
             </a></div>
        <ul>
          <li><a href="../../../guide/topics/resources/providing-resources.html">
                <span class="en">Providing Resources</span>
              </a></li>
          <li><a href="../../../guide/topics/resources/accessing-resources.html">
                <span class="en">Accessing Resources</span>
              </a></li>
          <li><a href="../../../guide/topics/resources/runtime-changes.html">
                <span class="en">Handling Runtime Changes</span>
              </a></li>
          <li><a href="../../../guide/topics/resources/localization.html">
                <span class="en">Localization</span>
              </a></li>
          <li class="toggle-list">
            <div><a href="../../../guide/topics/resources/available-resources.html">
              <span class="en">Resource Types</span>
            </a></div>
            <ul>
              <li><a href="../../../guide/topics/resources/animation-resource.html">Animation</a></li>
              <li><a href="../../../guide/topics/resources/color-list-resource.html">Color State List</a></li>
              <li><a href="../../../guide/topics/resources/drawable-resource.html">Drawable</a></li>
              <li><a href="../../../guide/topics/resources/layout-resource.html">Layout</a></li>
              <li><a href="../../../guide/topics/resources/menu-resource.html">Menu</a></li>
              <li><a href="../../../guide/topics/resources/string-resource.html">String</a></li>
              <li><a href="../../../guide/topics/resources/style-resource.html">Style</a></li>
              <li><a href="../../../guide/topics/resources/more-resources.html">More Types</a></li>
            </ul>
          </li><!-- end of resource types -->
        </ul>
      </li><!-- end of app resources -->
      <li class="toggle-list">
        <div><a href="../../../guide/topics/data/data-storage.html">
            <span class="en">Data Storage</span>
          </a></div>
          <ul>
            <li><a href="../../../guide/topics/data/backup.html">
                <span class="en">Data Backup</span>
              </a>
            </li>
          </ul>
      </li>
      <li><a href="../../../guide/topics/security/security.html">
            <span class="en">Security and Permissions</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/manifest/manifest-intro.html">
          <span class="en">The AndroidManifest.xml File</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/topics/manifest/action-element.html">&lt;action&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/activity-alias-element.html">&lt;activity-alias&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/application-element.html">&lt;application&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/category-element.html">&lt;category&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/compatible-screens-element.html">&lt;compatible-screens&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/data-element.html">&lt;data&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/instrumentation-element.html">&lt;instrumentation&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/intent-filter-element.html">&lt;intent-filter&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/meta-data-element.html">&lt;meta-data&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/path-permission-element.html">&lt;path-permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/permission-element.html">&lt;permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/permission-group-element.html">&lt;permission-group&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/permission-tree-element.html">&lt;permission-tree&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/service-element.html">&lt;service&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></li><!-- ##api level 4## -->
          <li><a href="../../../guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></li> <!-- ##api level 4## -->
          <li><a href="../../../guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></li>
          <li><a href="../../../guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></li>
        </ul>
      </li><!-- end of the manifest file -->
    </ul>

    <ul>
    <li class="toggle-list">
        <div><a href="../../../guide/topics/graphics/index.html">
            <span class="en">Graphics</span>
          </a><span class="new-child">new!</span></div>
        <ul>
          <li><a href="../../../guide/topics/graphics/2d-graphics.html">
              <span class="en">Canvas and Drawables</span></a></li>
          <li><a href="../../../guide/topics/graphics/hardware-accel.html">
              <span class="en">Hardware Acceleration</span></a>
            <span class="new">new!</span></li>
          <li><a href="../../../guide/topics/graphics/opengl.html">
              <span class="en">OpenGL</span>
            </a><span class="new">updated</span></li>
        </ul>
      </li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/graphics/animation.html">
            <span class="en">Animation</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/topics/graphics/prop-animation.html">
              <span class="en">Property Animation</span></a></li>
          <li><a href="../../../guide/topics/graphics/view-animation.html">
              <span class="en">View Animation</span></a></li>
          <li><a href="../../../guide/topics/graphics/drawable-animation.html">
              <span class="en">Drawable Animation</span></a></li>
        </ul>
      </li>
      <li class="toggle-list">
	        <div><a href="../../../guide/topics/renderscript/index.html">
	            <span class="en">RenderScript</span>
	          </a></div>
	        <ul>
	          <li><a href="../../../guide/topics/renderscript/graphics.html">
	                <span class="en">Graphics</span>
	              </a>
	          </li>
	          <li><a href="../../../guide/topics/renderscript/compute.html">
	                <span class="en">Compute</span>
	              </a>
	          </li>
	        </ul>
  	  </li>

      <li class="toggle-list">
          <div><a href="../../../guide/topics/media/index.html">
            <span class="en">Multimedia and Camera</span>
          </a><span class="new">updated</span></div>
          <ul>
            <li><a href="../../../guide/topics/media/mediaplayer.html">
                  <span class="en">Media Playback</span></a>
                </li>
            <li><a href="../../../guide/topics/media/jetplayer.html">
                  <span class="en">JetPlayer</span></a>
                </li>
            <li><a href="../../../guide/topics/media/camera.html">
                  <span class="en">Camera</span></a>
                  <span class="new">new!</span>
                </li>
            <li><a href="../../../guide/topics/media/audio-capture.html">
                  <span class="en">Audio Capture</span></a>
                </li>
          </ul>
      </li>
      <li>
        <a href="../../../guide/topics/clipboard/copy-paste.html">
            <span class="en">Copy and Paste</span>
        </a></li>
  <!--<li class="toggle-list">
        <div><a style="color:gray;">Sensors</a></div>
          <ul>
            <li><a style="color:gray;">Camera</a></li>
            <li><a style="color:gray;">Compass</a></li>
            <li><a style="color:gray;">Accelerometer</a></li>
          </ul>
      </li> -->
      <li class="toggle-list">
        <div><a href="../../../guide/topics/location/index.html">
               <span class="en">Location and Maps</span>
             </a></div>
        <ul>
          <li><a href="../../../guide/topics/location/obtaining-user-location.html">
                <span class="en">Obtaining User Location</span>
              </a></li>
        </ul>
      </li>
  <!--<li class="toggle-list">
        <div><a style="color:gray;">Wireless Controls</a></div>
          <ul>
            <li><a style="color:gray;">Wi-Fi</a></li>
          </ul>
      </li> -->
  <!--<li><a style="color:gray;">Localization</a></li>  -->
      <li><a href="../../../guide/topics/appwidgets/index.html">
            <span class="en">App Widgets</span></a>
          </li>
      <li><a href="../../../guide/topics/wireless/bluetooth.html">
            <span class="en">Bluetooth</span></a>
          </li>
      <li><a href="../../../guide/topics/nfc/index.html">
            <span class="en">Near Field Communication</span>
          </a></li>
      <li class="toggle-list">
          <div><a href="../../../guide/topics/usb/index.html">
            <span class="en">USB</span></a>
          </div>
            <ul>
              <li><a href="../../../guide/topics/usb/accessory.html">Accessory</a></li>
              <li><a href="../../../guide/topics/usb/host.html">Host</a></li>
              <li><a href="../../../guide/topics/usb/adk.html">Open Accessory Dev Kit</a></li>
            </ul>
          </li>

       <li><a href="../../../guide/topics/network/sip.html">
            <span class="en">Session Initiation Protocol</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/topics/search/index.html">
            <span class="en">Search</span>
          </a></div>
          <ul>
            <li><a href="../../../guide/topics/search/search-dialog.html">Creating a Search Interface</a></li>
            <li><a href="../../../guide/topics/search/adding-recent-query-suggestions.html">Adding Recent Query Suggestions</a></li>
            <li><a href="../../../guide/topics/search/adding-custom-suggestions.html">Adding Custom Suggestions</a></li>
            <li><a href="../../../guide/topics/search/searchable-config.html">Searchable Configuration</a></li>
          </ul>
      </li>
      <li><a href="../../../guide/topics/admin/device-admin.html">
            <span class="en">Device Administration</span></a>
      </li>
      <li class="toggle-list">
           <div>
                <a href="../../../guide/topics/testing/index.html">
                   <span class="en">Testing</span>
               </a>
           </div>
           <ul>
              <li>
                <a href="../../../guide/topics/testing/testing_android.html">
                <span class="en">Testing Fundamentals</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/activity_testing.html">
                <span class="en">Activity Testing</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/contentprovider_testing.html">
                <span class="en">Content Provider Testing</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/service_testing.html">
                <span class="en">Service Testing</span></a>
              </li>
              <li>
                <a href="../../../guide/topics/testing/what_to_test.html">
                <span class="en">What To Test</span></a>
              </li>
           </ul>
      </li>
    </ul>
  </li>

  <li>
    <h2>
      <span class="en">Android Market Topics</span>
    </h2>
    <ul>
      <li><a href="../../../guide/publishing/licensing.html">
          <span class="en">Application Licensing</span></a>
      </li>
      <li class="toggle-list">
        <div><a href="../../../guide/market/billing/index.html">
            <span class="en">In-app Billing</span></a>
        </div>
        <ul>
          <li><a href="../../../guide/market/billing/billing_overview.html">
              <span class="en">In-app Billing Overview</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_integrate.html">
              <span class="en">Implementing In-app Billing</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_best_practices.html">
              <span class="en">Security and Design</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_testing.html">
              <span class="en">Testing In-app Billing</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_admin.html">
              <span class="en">Administering In-app Billing</span></a>
          </li>
          <li><a href="../../../guide/market/billing/billing_reference.html">
              <span class="en">In-app Billing Reference</span></a>
          </li>
        </ul>
      </li>
      <li><a href="../../../guide/appendix/market-filters.html">
          <span class="en">Market Filters</span></a>
      </li>
      <li><a href="../../../guide/market/publishing/multiple-apks.html">
          <span class="en">Multiple APK Support</span></a>
      </li>
    </ul>
  </li>


  <li>
    <h2><span class="en">Developing</span>
               <span class="de" style="display:none">Entwicklung</span>
               <span class="es" style="display:none">Desarrollo</span>
               <span class="fr" style="display:none">Développement</span>
               <span class="it" style="display:none">Sviluppo</span>
               <span class="ja" style="display:none">開発</span>
               <span class="zh-CN" style="display:none">开发</span>
               <span class="zh-TW" style="display:none">開發</span>
    </h2>
    <ul>
  <!--<li><a href="">Developing for Android</a></li>
      signing, upgrading, selecting a package name, select device profile, touch, trackball, dpad available, etc. -->
      <li>
        <a href="../../../guide/developing/index.html">
        <span class="en">Introduction</span></a>
      </li>

      <li class="toggle-list">
        <div>
           <a href="../../../guide/developing/devices/index.html">
                <span class="en">Managing Virtual Devices</span>
            </a>
        </div>
        <ul>
          <li>
            <a href="../../../guide/developing/devices/managing-avds.html">
              <span class="en">With AVD Manager</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/devices/managing-avds-cmdline.html">
              <span class="en">From the Command Line</span>
            </a>
          </li>
          <li>
           <a href="../../../guide/developing/devices/emulator.html">
                <span class="en">Using the Android Emulator</span>
            </a>
          </li>
        </ul>
      </li>
      <li>
        <a href="../../../guide/developing/device.html">
          <span class="en">Using Hardware Devices</span>
        </a>
      </li>

      <li class="toggle-list">
        <div>
          <a href="../../../guide/developing/projects/index.html">
            <span class="en">Managing Projects</span>
          </a>
        </div>
        <ul>
          <li>
            <a href="../../../guide/developing/projects/projects-eclipse.html">
              <span class="en">From Eclipse with ADT</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/projects/projects-cmdline.html">
                <span class="en">From the Command Line</span>
            </a>
          </li>
        </ul>
      </li>

      <li class="toggle-list">
        <div>
          <a href="../../../guide/developing/building/index.html">
            <span class="en">Building and Running</span>
          </a>
        </div>
        <ul>
          <li><a href="../../../guide/developing/building/building-eclipse.html">
            <span class="en">From Eclipse with ADT</span>
          </a></li>
          <li><a href="../../../guide/developing/building/building-cmdline.html">
            <span class="en">From the Command Line</span></a></li>
        </ul>
      </li>

      <li class="toggle-list">
        <div>
          <a href="../../../guide/developing/debugging/index.html">
            <span class="en">Debugging</span>
          </a>
        </div>
        <ul>
          <li>
            <a href="../../../guide/developing/debugging/debugging-projects.html">
                <span class="en">From Eclipse with ADT</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-projects-cmdline.html">
                <span class="en">From Other IDEs</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/ddms.html">
              <span class="en">Using DDMS</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-log.html">
                <span class="en">Reading and Writing Logs</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-ui.html">
                <span class="en">Debugging and Profiling UIs</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-tracing.html">
                <span class="en">Profiling with Traceview and dmtracedump</span>
            </a>
          </li>
          <li>
            <a href="../../../guide/developing/debugging/debugging-devtools.html">
                <span class="en">Using the Dev Tools App</span>
            </a>
          </li>
        </ul>
      </li>

      <li class="toggle-list">
           <div>
                <a href="../../../guide/developing/testing/index.html">
                   <span class="en">Testing</span>
               </a>
           </div>
           <ul>
              <li>
                <a href="../../../guide/developing/testing/testing_eclipse.html">
                  <span class="en">From Eclipse with ADT</span>
                </a>
              </li>

              <li>
                <a href="../../../guide/developing/testing/testing_otheride.html">
                  <span class="en">From Other IDEs</span>
                </a>
              </li>
           </ul>
         </li>

         <li class="toggle-list">
        <div><a href="../../../guide/developing/tools/index.html">
            <span class="en">Tools</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/developing/tools/adb.html">adb</a></li>
          <li><a href="../../../guide/developing/tools/adt.html">ADT</a></li>
          <li><a href="../../../guide/developing/tools/android.html">android</a></li>
          <li><a href="../../../guide/developing/tools/bmgr.html">bmgr</a>
          <li><a href="../../../guide/developing/tools/dmtracedump.html">dmtracedump</a></li>
          <li><a href="../../../guide/developing/tools/draw9patch.html">Draw
          9-Patch</a></li>
          <li><a href="../../../guide/developing/tools/emulator.html">Emulator</a></li>
          <li><a href="../../../guide/developing/tools/etc1tool.html">etc1tool</a></li>
          <li><a href="../../../guide/developing/tools/hierarchy-viewer.html">Hierarchy Viewer</a></li>
          <li><a href="../../../guide/developing/tools/hprof-conv.html">hprof-conv</a></li>
          <li><a href="../../../guide/developing/tools/layoutopt.html">layoutopt</a></li>
          <li><a href="../../../guide/developing/tools/logcat.html">logcat</a></li>
          <li><a href="../../../guide/developing/tools/mksdcard.html">mksdcard</a></li>
          <li><a href="../../../guide/developing/tools/monkey.html">Monkey</a></li>
          <li class="toggle-list">
            <div><a href="../../../guide/developing/tools/monkeyrunner_concepts.html">
              <span class="en">monkeyrunner</span>
            </a></div>
            <ul>
              <li><a href="../../../guide/developing/tools/MonkeyDevice.html">
                <span class="en">MonkeyDevice</span>
                </a></li>
              <li><a href="../../../guide/developing/tools/MonkeyImage.html">
                <span class="en">MonkeyImage</span>
                </a></li>
              <li><a href="../../../guide/developing/tools/MonkeyRunner.html">
                <span class="en">MonkeyRunner</span>
                </a></li>
            </ul>
          </li>
          <li><a href="../../../guide/developing/tools/proguard.html">ProGuard</a></li>
          <li><a href="../../../guide/developing/tools/adb.html#sqlite">sqlite3</a></li>
          <li><a href="../../../guide/developing/tools/traceview.html">Traceview</a></li>
          <li><a href="../../../guide/developing/tools/zipalign.html">zipalign</a></li>
        </ul>
      </li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Publishing</span>
        <span class="de" style="display:none">Veröffentlichung</span>
        <span class="es" style="display:none">Publicación</span>
        <span class="fr" style="display:none">Publication</span>
        <span class="it" style="display:none">Pubblicazione</span>
        <span class="ja" style="display:none">公開</span>
        <span class="zh-CN" style="display:none">发布</span>
        <span class="zh-TW" style="display:none">發佈</span>
    </h2>
    <ul>
      <li><a href="../../../guide/publishing/app-signing.html">
            <span class="en">Signing Your Applications</span>
            <span class="de" style="display:none">Signieren Ihrer Anwendungen</span>
            <span class="es" style="display:none">Firma de aplicaciones</span>
            <span class="fr" style="display:none">Attribution de votre signature <br />à vos applications</span>
            <span class="it" style="display:none">Firma delle applicazioni</span>
            <span class="ja" style="display:none">アプリケーションへの署名</span>
            <span class="zh-CN" style="display:none">应用程序签名</span>
            <span class="zh-TW" style="display:none">簽署應用程式</span>
          </a></li>
      <li><a href="../../../guide/publishing/versioning.html">
            <span class="en">Versioning Your Applications</span>
            <span class="de" style="display:none">Versionsverwaltung für Ihre <br />Anwendungen</span>
            <span class="es" style="display:none">Versiones de las aplicaciones</span>
            <span class="fr" style="display:none">Attribution d'une version à vos applications</span>
            <span class="it" style="display:none">Controllo versioni delle applicazioni</span>
            <span class="ja" style="display:none">アプリケーションのバージョニング</span>
            <span class="zh-CN" style="display:none">应用程序版本控制</span>
            <span class="zh-TW" style="display:none">應用程式版本設定</span>
          </a></li>
      <li><a href="../../../guide/publishing/preparing.html">
            <span class="en">Preparing to Publish</span>
            <span class="de" style="display:none">Vorbereitung auf die Veröffentlichung</span>
            <span class="es" style="display:none">Publicación de aplicaciones</span>
            <span class="fr" style="display:none">Préparation à la publication</span>
            <span class="it" style="display:none">Preparativi per la pubblicazione</span>
            <span class="ja" style="display:none">公開の準備</span>
            <span class="zh-CN" style="display:none">准备发布</span>
            <span class="zh-TW" style="display:none">準備發佈</span>
          </a></li>
      <li><a href="../../../guide/publishing/publishing.html">
            <span class="en">Publishing on Android Market</span>
          </a></li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Best Practices</span>
               <span class="de" style="display:none">Bewährte Verfahren</span>
               <span class="es" style="display:none">Prácticas recomendadas</span>
               <span class="fr" style="display:none">Meilleures pratiques</span>
               <span class="it" style="display:none">Best practice</span>
               <span class="ja" style="display:none">ベスト プラクティス</span>
               <span class="zh-CN" style="display:none">最佳实践</span>
               <span class="zh-TW" style="display:none">最佳實務</span>
    </h2>
    <ul>
      <li><a href="../../../guide/practices/compatibility.html">
            <span class="en">Compatibility</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/practices/screens_support.html">
          <span class="en">Supporting Multiple Screens</span>
        </a></div>
        <ul>
          <li><a href="../../../guide/practices/screens-distribution.html">
            <span class="en">Distributing to Specific Screens</span>
          </a></li>
          <li><a href="../../../guide/practices/screen-compat-mode.html">
            <span class="en">Screen Compatibility Mode</span>
          </a></li>
          <li><a href="../../../guide/practices/screens-support-1.5.html">
            <span class="en">Strategies for Android 1.5</span>
          </a></li>
        </ul>
      </li>
      <li><a href="../../../guide/practices/optimizing-for-3.0.html">
            <span class="en">Optimizing Apps for Android 3.0</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/practices/ui_guidelines/index.html">
               <span class="en">UI Guidelines</span>
             </a></div>
        <ul>
          <li class="toggle-list">
            <div><a href="../../../guide/practices/ui_guidelines/icon_design.html">
                   <span class="en">Icon Design <span class="new">updated</span></span>
                 </a></div>
            <ul>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_launcher.html">
                    <span class="en">Launcher Icons <span class="new">updated</span></span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_menu.html">
                    <span class="en">Menu Icons</span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_action_bar.html">
                    <span class="en">Action Bar Icons <span class="new">new!</span></span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_status_bar.html">
                    <span class="en">Status Bar Icons <span class="new">updated</span></span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_tab.html">
                    <span class="en">Tab Icons</span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_dialog.html">
                    <span class="en">Dialog Icons</span>
                  </a></li>
              <li><a href="../../../guide/practices/ui_guidelines/icon_design_list.html">
                    <span class="en">List View Icons</span>
                  </a></li>
            </ul>
          </li>
          <li><a href="../../../guide/practices/ui_guidelines/widget_design.html">
                <span class="en">App Widget Design <span class="new">updated</span></span>
              </a></li>
          <li><a href="../../../guide/practices/ui_guidelines/activity_task_design.html">
                <span class="en">Activity and Task Design</span>
              </a></li>
          <li><a href="../../../guide/practices/ui_guidelines/menu_design.html">
                <span class="en">Menu Design</span>
              </a></li>
        </ul>
      </li>
      </ul>
      <ul>
      <li><a href="../../../guide/practices/design/accessibility.html">
            <span class="en">Designing for Accessibility</span>
          </a></li>
      <li class="toggle-list">
        <div><a href="../../../guide/practices/design/performance.html">
            <span class="en">Designing for Performance</span>
          </a></div>
        <ul>
          <li><a href="../../../guide/practices/design/jni.html">
                <span class="en">JNI Tips</span>
              </a></li>
        </ul>
      </li>
      <li><a href="../../../guide/practices/design/responsiveness.html">
            <span class="en">Designing for Responsiveness</span>
          </a></li>
      <li><a href="../../../guide/practices/design/seamlessness.html">
            <span class="en">Designing for Seamlessness</span>
          </a></li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Web Applications</span>
    </h2>
    <ul>
      <li><a href="../../../guide/webapps/index.html">
            <span class="en">Web Apps Overview</span>
          </a></li>
      <li><a href="../../../guide/webapps/targeting.html">
            <span class="en">Targeting Screens from Web Apps</span>
          </a></li>
      <li><a href="../../../guide/webapps/webview.html">
            <span class="en">Building Web Apps in WebView</span>
          </a></li>
      <li><a href="../../../guide/webapps/debugging.html">
            <span class="en">Debugging Web Apps</span>
          </a></li>
      <li><a href="../../../guide/webapps/best-practices.html">
            <span class="en">Best Practices for Web Apps</span>
          </a></li>
    </ul>
  </li>

  <li>
    <h2><span class="en">Appendix</span>
               <span class="de" style="display:none">Anhang</span>
               <span class="es" style="display:none">Apéndice</span>
               <span class="fr" style="display:none">Annexes</span>
               <span class="it" style="display:none">Appendice</span>
               <span class="ja" style="display:none">付録</span>
               <span class="zh-CN" style="display:none">附录</span>
               <span class="zh-TW" style="display:none">附錄</span>
    </h2>
    <ul>
      <li><a href="../../../guide/appendix/api-levels.html">
            <span class="en">Android API Levels</span>
          </a></li>
      <li><a href="../../../guide/appendix/install-location.html">
            <span class="en">App Install Location</span>
          </a></li>
      <li><a href="../../../guide/appendix/media-formats.html">
            <span class="en">Supported Media Formats <span class="new">updated</span></span>
          </a></li>
      <li><a href="../../../guide/appendix/g-app-intents.html">
            <span class="en">Intents List: Google Apps</span>
          </a></li>
      <li><a href="../../../guide/developing/tools/aidl.html">AIDL</a></li>
      <li><a href="../../../guide/appendix/glossary.html">
            <span class="en">Glossary</span>
          </a></li>
    </ul>
  </li>

</ul>

<script type="text/javascript">
<!--
    buildToggleLists();
    changeNavLang(getLangPref());
//-->
</script>

      </div>
    </div> <!-- end side-nav -->
    <script>
      addLoadEvent(function() {
        scrollIntoView("devdoc-nav");
        });
    </script>




<div class="g-unit" id="doc-content"><a name="top"></a>

<div id="jd-header" class="guide-header">
  <span class="crumb">
    &nbsp;
    
  </span>
<h1>Near Field Communication</h1>
</div>

  <div id="jd-content">

    <div class="jd-descr">
    <div id="qv-wrapper">
<div id="qv">
  <h2>In this document</h2>
  <ol>
    <li><a href="#api">API Overview</a></li>
    <li><a href="#manifest">Declaring Android Manifest elements</a></li>
    <li><a href="#dispatch">The Tag Dispatch System</a>
      <ol>
        <li><a href="#intent-dispatch">Using the intent dispatch system</a></li>
        <li><a href="#foreground-dispatch">Using the foreground dispatch system</a></li>
      </ol></li>
    <li><a href="#ndef">Working with Data on NFC Tags</a></li>
    <li><a href="#read">Reading an NFC Tag</a></li>
    <li><a href="#write">Writing to an NFC Tag</a></li>
    <li><a href="#p2p">Peer-to-Peer Data Exchange</a></li>
  </ol>
</div>
</div>

  <p>Near Field Communication (NFC) is a set of short-range wireless technologies, typically
  requiring a distance of 4cm or less. NFC operates at 13.56mhz, and at rates ranging from 106
  kbit/s to 848 kbit/s. NFC communication always involves an initiator and a target. The initiator
  actively generates an RF field that can power a passive target. This enables NFC targets to take
  very simple form factors such as tags, stickers or cards that do not require power. NFC
  peer-to-peer communication is also possible, where both devices are powered.</p>

  <p>Compared to other wireless technologies such as Bluetooth or WiFi, NFC provides much lower
  bandwidth and range, but enables low-cost, un-powered targets and does not require discovery or
  pairing. Interactions can be initiated with just a tap.</p>

  <p>An Android device with NFC hardware will typically act as an initiator when the screen is on.
  This mode is also known as NFC reader/writer. It will actively look for NFC tags and start
  activities to handle them. Android 2.3.3 also has some limited P2P support.</p>

  <p>Tags can range in complexity, simple tags just offer read/write semantics, sometimes with
  one-time-programmable areas to make the card read-only. More complex tags offer math operations,
  and have cryptographic hardware to authenticate access to a sector. The most sophisticated tags
  contain operating environments, allowing complex interactions with code executing on the tag.</p>

  <h2 id="api">API Overview</h2>

  <p>The <code><a href="../../../reference/android/nfc/package-summary.html">android.nfc</a></code> package contains the high-level classes to interact with the local
  device's NFC adapter, to represent discovered tags, and to use the NDEF data format.</p>

  <table>
    <tr>
      <th>Class</th>

      <th>Description</th>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/NfcManager.html">NfcManager</a></code></td>

      <td>A high level manager class that enumerates the NFC adapters on this Android device. Since
      most Android devices only have one NFC adapter, you can just use the static helper <code><a href="../../../reference/android/nfc/NfcAdapter.html#getDefaultAdapter(android.content.Context)">getDefaultAdapter(Context)</a></code> for most situations.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/NfcAdapter.html">NfcAdapter</a></code></td>

      <td>Represents the local NFC adapter. Defines the intent's used to request tag dispatch to
      your activity, and provides methods to register for foreground tag dispatch and foreground
      NDEF push. Foreground NDEF push is the only peer-to-peer support that is currently provided
      in Android.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code> and <code><a href="../../../reference/android/nfc/NdefRecord.html">NdefRecord</a></code></td>

      <td>NDEF is an NFC Forum defined data structure, designed to efficiently store data on NFC
      tags, such as text, URL's, and other MIME types. A <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code> acts as a
      container for the data that you want to transmit or read. One <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code>
      object contains zero or more <code><a href="../../../reference/android/nfc/NdefRecord.html">NdefRecord</a></code>s. Each NDEF record has a type
      such as text, URL, smart poster, or any MIME data. The type of the first NDEF record in the
      NDEF message is used to dispatch a tag to an activity on Android.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/Tag.html">Tag</a></code></td>

      <td>Represents a passive NFC target. These can come in many form factors such as a tag, card,
      key fob, or even a phone doing card emulation. When a tag is discovered, a <code><a href="../../../reference/android/nfc/Tag.html">Tag</a></code> object is created and wrapped inside an Intent. The NFC dispatch system
      sends the intent to a compatible activity using <code>startActivity()</code>. You can use the
      <code><a href="../../../reference/android/nfc/Tag.html#getTechList()">getTechList()</a></code> method to determine the technologies
      supported by this tag and create the corresponding <code><a href="../../../reference/android/nfc/tech/TagTechnology.html">TagTechnology</a></code>
      object with one of classes provided by <code><a href="../../../reference/android/nfc/tech/package-summary.html">android.nfc.tech</a></code>.</td>
    </tr>
  </table>

  <p>The <code><a href="../../../reference/android/nfc/tech/package-summary.html">android.nfc.tech</a></code> package contains classes to query properties and perform I/O
  operations on a tag. The classes are divided to represent different NFC technologies that can be
  available on a Tag:</p>

  <table>
    <tr>
      <th>Class</th>

      <th>Description</th>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/TagTechnology.html">TagTechnology</a></code></td>

      <td>The interface that all tag technology classes must implement.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/NfcA.html">NfcA</a></code></td>

      <td>Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/NfcB.html">NfcB</a></code></td>

      <td>Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/NfcF.html">NfcF</a></code></td>

      <td>Provides access to NFC-F (JIS 6319-4) properties and I/O operations.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/NfcV.html">NfcV</a></code></td>

      <td>Provides access to NFC-V (ISO 15693) properties and I/O operations.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/IsoDep.html">IsoDep</a></code></td>

      <td>Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/Ndef.html">Ndef</a></code></td>

      <td>Provides access to NDEF data and operations on NFC tags that have been formatted as
      NDEF.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/NdefFormatable.html">NdefFormatable</a></code></td>

      <td>Provides a format operations for tags that may be NDEF formattable.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/MifareClassic.html">MifareClassic</a></code></td>

      <td>Provides access to MIFARE Classic properties and I/O operations, if this Android device
      supports MIFARE.</td>
    </tr>

    <tr>
      <td><code><a href="../../../reference/android/nfc/tech/MifareUltralight.html">MifareUltralight</a></code></td>

      <td>Provides access to MIFARE Ultralight properties and I/O operations, if this Android
      device supports MIFARE.</td>
    </tr>
  </table>

  <h2 id="manifest">Declaring Android Manifest elements</h2>

  <p>Before you can access a device's NFC hardware and properly handle NFC intents, declare these
  items in your <code>AndroidManifest.xml</code> file:</p>

  <ol>
    <li>The NFC <code>&lt;uses-permission&gt;</code> element to access the NFC hardware:
      <pre>
&lt;uses-permission android:name="android.permission.NFC" /&gt;
</pre>
    </li>

    <li>The minimum SDK version that your application can support. API level 9 only supports
    limited tag dispatch via <code><a href="../../../reference/android/nfc/NfcAdapter.html#ACTION_TAG_DISCOVERED">ACTION_TAG_DISCOVERED</a></code>, and only gives
    access to NDEF messages via the <code><a href="../../../reference/android/nfc/NfcAdapter.html#EXTRA_NDEF_MESSAGES">EXTRA_NDEF_MESSAGES</a></code> extra. No
    other tag properties or I/O operations are accessible. You probably want to use API level 10
    which includes comprehensive reader/writer support.
      <pre class="pretty-print">
&lt;uses-sdk android:minSdkVersion="10"/&gt;
</pre>
    </li>

    <li>The uses-feature element so that your application can show up in the Android Market for
    devices that have NFC hardware:
      <pre>
&lt;uses-feature android:name="android.hardware.nfc" android:required="true" /&gt;
</pre>
    </li>

    <li>The NFC intent filter to tell the Android system your Activity can handle NFC data. Specify
    one or more of these three intent filters:
      <pre>
&lt;intent-filter&gt;
  &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
  &lt;data android:mimeType="<em>mime/type</em>" /&gt;
&lt;/intent-filter&gt;

&lt;intent-filter&gt;
  &lt;action android:name="android.nfc.action.TECH_DISCOVERED"/&gt;
  &lt;meta-data android:name="android.nfc.action.TECH_DISCOVERED"
                android:resource="@xml/<em>nfc_tech_filter</em>.xml" /&gt;
&lt;/intent-filter&gt;

&lt;intent-filter&gt;
  &lt;action android:name="android.nfc.action.TAG_DISCOVERED"/&gt;
&lt;/intent-filter&gt;
</pre>

      <p>The three intent filters are prioritized and behave in specific ways. Declare only the
      ones that your Activity needs to handle. For more information on how to handle these filters,
      see the section about <a href="#dispatch">The Tag Dispatch System</a>.</p>
    </li>
  </ol>

  <p>View the <a href=
  "../../../resources/samples/NFCDemo/AndroidManifest.html">AndroidManifest.xml</a> from the
  NFCDemo sample to see a complete example.</p>

  <h2 id="dispatch">The Tag Dispatch System</h2>

  <p>When an Android device scans an NFC tag, the desired behavior is to have the most appropriate
  Activity handle the intent without asking the user what application to use. Because devices scan
  NFC tags at a very short range, it is likely that making users manually select an Activity forces
  them to move the device away from the tag and break the connection. You should develop your
  Activity to only handle the NFC tags that your Activity cares about to prevent the Activity
  Chooser from appearing. Android provides two systems to help you correctly identify an NFC tag
  that your Activity should handle: the Intent dispatch system and the foreground Activity dispatch
  system.</p>

  <p>The intent dispatch system checks the intent filters of all the Activities along with the
  types of data that the Activities support to find the best Activity that can handle the NFC tag.
  If multiple Activities specify the same intent filter and data to handle, then the Activity
  Chooser is presented to the user as a last resort.</p>

  <p>The foreground dispatch system allows an Activity application to override the intent dispatch
  system and have priority when an NFC tag is scanned. The Activity handling the request must be
  running in the foreground of the device. When an NFC tag is scanned and matches the intent and
  data type that the foreground dispatch Activity defines, the intent is immediately sent to the
  Activity even if another Activity can handle the intent. If the Activity cannot handle the
  intent, the foreground dispatch system falls back to the intent dispatch system.</p>

  <h3 id="intent-dispatch">Using the intent dispatch system</h3>

  <p>The intent dispatch system specifies three intents that each have a priority. The intents that
  start when a device scans a tag depend on the type of tag scanned. In general, the intents are
  started in the following manner:</p>

  <ul>
    <li>
      <code>android.nfc.action.NDEF_DISCOVERED</code>: This intent starts when a tag that contains
      an NDEF payload is scanned. This is the highest priority intent. The Android system does not
      let you specify this intent generically to handle all data types. You must specify
      <code>&lt;data&gt;</code> elements in the <code>AndroidManifest.xml</code> along with this
      intent to correctly handle NFC tags that start this intent. For example, to handle a
      <code>NDEF_DISCOVERED</code> intent that contains plain text, specify the following filter in
      your <code>AndroidManifest.xml</code> file:
      <pre>
&lt;intent-filter&gt;
    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
    &lt;data android:mimeType="text/plain" /&gt;
&lt;/intent-filter&gt;
</pre>

      <p>If the <code>NDEF_DISCOVERED</code> intent is started, the <code>TECH_DISCOVERED</code>
      and <code>TAG_DISCOVERED</code> intents are not started. This intent does not start if an
      unknown tag is scanned or if the tag does not contain an NDEF payload.</p>
    </li>

    <li><code>android.nfc.action.TECH_DISCOVERED</code>: If the <code>NDEF_DISCOVERED</code> intent
    does not start or is not filtered by any Activity on the device, this intent starts if the tag
    is known. The <code>TECH_DISCOVERED</code> intent requires that you specify the technologies
    that you want to support in an XML resource file. For more information, see the section about
    <a href="#technology-resources">Specifying tag technologies to handle</a>.</li>

    <li><code>android.nfc.action.TAG_DISCOVERED</code>: This intent starts if no Activities handle
    the <code>NDEF_DISCOVERED</code> and <code>TECH_DISCOVERED</code> intents or if the tag that is
    scanned is unknown.</li>
  </ul>

  <h4 id="tech">Specifying tag technologies to handle</h4>

  <p>If your Activity declares the <code>android.nfc.action.TECH_DISCOVERED</code> intent in your
  <code>AndroidManifest.xml</code> file, you must create an XML resource file that specifies the
  technologies that your Activity supports within a <code>tech-list</code> set. Your Activity is
  considered a match if a <code>tech-list</code> set is a subset of the technologies that are
  supported by the tag, which you can obtain by calling <code><a href="../../../reference/android/nfc/Tag.html#getTechList()">getTechList()</a></code>.</p>

  <p>For example, if the tag that is scanned supports MifareClassic, NdefFormatable, and NfcA, your
  <code>tech-list</code> set must specify all three, two, or one of the technologies (and nothing
  else) in order for your Activity to be matched.</p>

  <p>The following sample defines all of the technologies. You can remove the ones that you do not
  need. Save this file (you can name it anything you wish) in the
  <code>&lt;project-root&gt;/res/xml</code> folder.</p>
  <pre>
&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
    &lt;tech-list&gt;
        &lt;tech&gt;android.nfc.tech.IsoDep&lt;/tech&gt;
        &lt;tech&gt;android.nfc.tech.NfcA&lt;/tech&gt;        
        &lt;tech&gt;android.nfc.tech.NfcB&lt;/tech&gt;
        &lt;tech&gt;android.nfc.tech.NfcF&lt;/tech&gt;
        &lt;tech&gt;android.nfc.tech.NfcV&lt;/tech&gt;
        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
        &lt;tech&gt;android.nfc.tech.NdefFormatable&lt;/tech&gt;
        &lt;tech&gt;android.nfc.tech.MifareClassic&lt;/tech&gt;
        &lt;tech&gt;android.nfc.tech.MifareUltralight&lt;/tech&gt;
    &lt;/tech-list&gt;
&lt;/resources&gt;
</pre>

  <p>You can also specify multiple <code>tech-list</code> sets. Each of the <code>tech-list</code>
  sets is considered independently, and your Activity is considered a match if any single
  <code>tech-list</code> set is a subset of the technologies that are returned by <code><a href="../../../reference/android/nfc/Tag.html#getTechList()">getTechList()</a></code>. This provides <code>AND</code> and <code>OR</code>
  semantics for matching technologies. The following example matches tags that can support the
  NfcA and Ndef technologies or can support the NfcB and Ndef technologies:</p>
  <pre>
&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
    &lt;tech-list&gt;
        &lt;tech&gt;android.nfc.tech.NfcA&lt;/tech&gt;        
        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
    &lt;/tech-list&gt;
&lt;/resources&gt;

&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
    &lt;tech-list&gt;
        &lt;tech&gt;android.nfc.tech.NfcB&lt;/tech&gt;        
        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
    &lt;/tech-list&gt;
&lt;/resources&gt;
</pre>

  <p>In your <code>AndroidManifest.xml</code> file, specify the resource file that you just created
  in the <code>&lt;meta-data&gt;</code> element inside the <code>&lt;activity&gt;</code>
  element like in the following example:</p>
  <pre>
&lt;activity&gt;
...
&lt;intent-filter&gt;
    &lt;action android:name="android.nfc.action.TECH_DISCOVERED"/&gt;
&lt;/intent-filter&gt;

&lt;meta-data android:name="android.nfc.action.TECH_DISCOVERED"
    android:resource="@xml/nfc_tech_filter" /&gt;
...
&lt;/activity&gt;
</pre>

  <h3 id="foreground-dispatch">Using the foreground dispatch system</h3>

  <p>The foreground dispatch system allows an Activity to intercept an intent and claim priority
  over other Activities that handle the same intent. The system is easy to use and involves
  constructing a few data structures for the Android system to be able to send the appropriate
  intents to your application. To enable the foreground dispatch system:</p>

  <ol>
    <li>Add the following code in the onCreate() method of your Activity:

      <ol type="a">
        <li>Create a <code><a href="../../../reference/android/app/PendingIntent.html">PendingIntent</a></code> object so the Android system can populate it
        with the details of the tag when it is scanned
          <pre>
PendingIntent pendingIntent = PendingIntent.getActivity(
    this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
</pre>
        </li>

        <li>Declare intent filters to handle the intents that you want to intercept. The foreground
        dispatch system checks the specified intent filters with the intent that is received when
        the device scans a tag. If they match, then your application handles the intent. If it does
        not match, the foreground dispatch system falls back to the intent dispatch system.
        Specifying a <code>null</code> array of intent filters and for the technology filters, you
        receive a <code>TAG_DISCOVERED</code> intent for all tags discovered. Note that the snippet
        below handles all MIME types. You should only handle the ones that you need.
          <pre>
    IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
        try {
            ndef.addDataType("*/*");    /* Handles all MIME based dispatches. 
                                           You should specify only the ones that you need. */
        }
        catch (MalformedMimeTypeException e) {
            throw new RuntimeException("fail", e);
        }
        intentFiltersArray = new IntentFilter[] {
                ndef,
        };
</pre>
        </li>

        <li>Set up an array of tag technologies that your application wants to handle. Call the
        <code>Object.class.getName()</code> method to obtain the class of the technology that you
        want to support.
          <pre>

  techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
  
</pre>
        </li>
      </ol>
    </li>

    <li>Override the following Activity lifecycle callbacks and add logic to enable and disable the
    foreground dispatch when the Activity loses (<code><a href="../../../reference/android/app/Activity.html#onPause()">onPause()</a></code>)
    and regains (<code><a href="../../../reference/android/app/Activity.html#onResume()">onResume()</a></code>) focus. <code><a href="../../../reference/android/nfc/NfcAdapter.html#enableForegroundDispatch(android.app.Activity, android.app.PendingIntent, android.content.IntentFilter[], java.lang.String[][])">enableForegroundDispatch(Activity, PendingIntent, IntentFilter[], String[][])</a></code> must be called from the main thread and only
    when the activity is in the foreground (calling in <code><a href="../../../reference/android/app/Activity.html#onResume()">onResume()</a></code> guarantees this). You also need to implement the <code><a href="../../../reference/android/app/Activity.html#onNewIntent(android.content.Intent)">onNewIntent</a></code> callback to process the data from the scanned NFC
    tag.
      <pre>
public void onPause() {
    super.onPause();
    mAdapter.disableForegroundDispatch(this);
}   

public void onResume() {
    super.onResume();
    mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
}

public void onNewIntent(Intent intent) {
    Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
    //do something with tagFromIntent
}
</pre>
    </li>
  </ol>

  <p>See the <a href=
  "../../../resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">ForegroundDispatch</a>
  sample from API Demos for the complete sample.</p>

  <h2 id="ndef">Working with Data on NFC Tags</h2>

  <p>Data on NFC tags are encoded in raw bytes, so you must convert the bytes to something human
  readable if you are presenting the data to the user. When writing to NFC tags, you must write
  them in bytes as well. Android provides APIs to help write messages that conform to the NDEF
  standard, which was developed by the <a href="http://www.nfc-forum.org/specs/">NFC Forum</a> to
  standardized data on tags. Using this standard ensures that your data will be supported by all
  Android NFC devices if you are writing to tags. However, many tag technologies use their own
  standard for storing data and are supported by Android as well, but you have to implement your
  own protocol stack to read and write to these tags. You can find a full list of the supported
  technologies in <code><a href="../../../reference/android/nfc/tech/package-summary.html">android.nfc.tech</a></code> and an overview of the technologies in the <code><a href="../../../reference/android/nfc/tech/TagTechnology.html">TagTechnology</a></code> interface. This section is a brief overview of how to work with
  NDEF messages in the context of the Android system. It is not meant to be a complete discussion
  of the NDEF specification, but highlights the main things that you need to be aware of when
  working with NDEF messages in Android.</p>

  <p>To facilitate working with NDEF messages, Android provides the <code><a href="../../../reference/android/nfc/NdefRecord.html">NdefRecord</a></code>
  and <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code> to encapsulate the raw bytes that represent NDEF messages. An
  <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code> is the container for zero or more <code><a href="../../../reference/android/nfc/NdefRecord.html">NdefRecord</a></code>s. Each <code><a href="../../../reference/android/nfc/NdefRecord.html">NdefRecord</a></code> has its own unique type name
  format, record type, and ID to distinguish them from other records within the same <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code>. You can store different types of records of varying length in a single
  <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code>. The size constraint of the NFC tag determines how big your
  <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code> can be.</p>

  <p>Tags that support the <code><a href="../../../reference/android/nfc/tech/Ndef.html">Ndef</a></code> and <code><a href="../../../reference/android/nfc/tech/NdefFormatable.html">NdefFormatable</a></code> technologies return and accept <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code>
  objects as parameters for read and write operations. You need to create your own logic to read
  and write bytes for other tag technologies in <code><a href="../../../reference/android/nfc/tech/package-summary.html">android.nfc.tech</a></code>.</p>

  <p>You can download technical specifications for different types of NDEF message standards, such
  as plain text and Smart Posters, at the <a href="http://www.nfc-forum.org/specs/">NFC Forum</a>
  website. The NFCDemo sample application also declares sample <a href=
  "../../../resources/samples/NFCDemo/src/com/example/android/nfc/simulator/MockNdefMessages.html">
  plain text and SmartPoster NDEF messages.</a></p>

  <h2 id="read">Reading an NFC Tag</h2>

  <p>When a device comes in proximity to an NFC tag, the appropriate intent is started on the
  device, notifying interested applications that a NFC tag was scanned. By previously declaring the
  appropriate intent filter in your <code>AndroidManifest.xml</code> file or using foreground
  dispatching, your application can request to handle the intent.</p>

  <p>The following method (slightly modified from the NFCDemo sample application), handles the
  <code>TAG_DISCOVERED</code> intent and iterates through an array obtained from the intent that
  contains the NDEF payload:</p>
  <pre>
NdefMessage[] getNdefMessages(Intent intent) {
    // Parse the intent
    NdefMessage[] msgs = null;
    String action = intent.getAction();
    if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)) {
        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
        if (rawMsgs != null) {
            msgs = new NdefMessage[rawMsgs.length];
            for (int i = 0; i &lt; rawMsgs.length; i++) {
                msgs[i] = (NdefMessage) rawMsgs[i];
            }
        }
        else {
        // Unknown tag type
            byte[] empty = new byte[] {};
            NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
            NdefMessage msg = new NdefMessage(new NdefRecord[] {record});
            msgs = new NdefMessage[] {msg};
        }
    }        
    else {
        Log.e(TAG, "Unknown intent " + intent);
        finish();
    }
    return msgs;
}
</pre>

  <p>Keep in mind that the data that the device reads is in bytes, so you must implement your own
  logic if you need to present the data in a readable format to the user. The classes in
  <code>com.example.android.nfc.record</code> of the NFCDemo sample show you how to parse some
  common types of NDEF messages such as plain text or a SmartPoster.</p>

  <h2 id="write">Writing to an NFC Tag</h2>

  <p>Writing to an NFC tag involves constructing your NDEF message in bytes and using the
  appropriate tag technology for the tag that you are writing to. The following code sample shows
  you how to write a simple text message to a <code><a href="../../../reference/android/nfc/tech/NdefFormatable.html">NdefFormatable</a></code> tag:</p>
  <pre>
NdefFormatable tag = NdefFormatable.get(t);
Locale locale = Locale.US;
final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
String text = "Tag, you're it!";
final byte[] textBytes = text.getBytes(Charsets.UTF_8);
final int utfBit = 0;
final char status = (char) (utfBit + langBytes.length);
final byte[] data = Bytes.concat(new byte[] {(byte) status}, langBytes, textBytes);
NdefRecord record = NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
try {
    NdefRecord[] records = {text};
    NdefMessage message = new NdefMessage(records);
    tag.connect();
    tag.format(message);
}
catch (Exception e){
    //do error handling
}
</pre>

  <h2 id="p2p">Peer-to-Peer Data Exchange</h2>

  <p>Support for simple peer-to-peer data exchange is supported by the foreground push feature,
  which is enabled with the <code><a href="../../../reference/android/nfc/NfcAdapter.html#enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage)">enableForegroundNdefPush(Activity, NdefMessage)</a></code> method. To use
  this feature:</p>

  <ul>
    <li>The Activity that is pushing the data must be in the foreground</li>

    <li>You must encapsulate the data that you are sending in an <code><a href="../../../reference/android/nfc/NdefMessage.html">NdefMessage</a></code>
    object</li>

    <li>The NFC device that is receiving the pushed data (the scanned device) must support the
    <code>com.android.npp</code> NDEF push protocol, which is optional for Android devices.</li>
  </ul>

  <p class="note">If your Activity enables the foreground push feature and is in the foreground,
  the standard intent dispatch system is disabled. However, if your Activity also enables
  foreground dispatching, then it can still scan tags that match the intent filters set in the
  foreground dispatching.</p>

  <p>To enable foreground dispatching:</p>

  <ol>
    <li>Create an NdefMessage that contains the NdefRecords that you want to push onto the other
    device.</li>

    <li>Implement the <code><a href="../../../reference/android/app/Activity.html#onResume()">onResume()</a></code> and <code><a href="../../../reference/android/app/Activity.html#onPause()">onPause()</a></code> callbacks in your Activity to appropriately handle the
    foreground pushing lifecycle. You must call <code><a href="../../../reference/android/nfc/NfcAdapter.html#enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage)">enableForegroundNdefPush(Activity, NdefMessage)</a></code> from the main thread and only when the
    activity is in the foreground (calling in <code><a href="../../../reference/android/app/Activity.html#onResume()">onResume()</a></code>
    guarantees this).
      <pre>
public void onResume() {
    super.onResume();
    if (mAdapter != null)
        mAdapter.enableForegroundNdefPush(this, myNdefMessage);
}
public void onPause() {
    super.onPause();
    if (mAdapter != null)
        mAdapter.disableForegroundNdefPush(this);
}
</pre>
    </li>
  </ol>

  <p>When the Activity is in the foreground, you can now tap the device to another device and push
  the data to it. See the <a href=
  "../../../resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.html">ForegroundNdefPush</a>
  sample in API Demos for a simple example of peer-to-peer data exchange.</p>
    </div>

  <a href="#top" style="float:right">&uarr; Go to top</a>
  
  </div>

<div id="footer">


  <div id="copyright">
    
  Except as noted, this content is licensed under <a
  href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0</a>. 
  For details and restrictions, see the <a href="../../../license.html">
  Content License</a>.
  </div>
  <div id="build_info">
    
  Android 4.0&nbsp;r1 - 17 Oct 2011 18:17

  </div>

  <div id="footerlinks">
    
  <p>
    <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
    <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
    <a href="http://www.android.com/branding.html">Brand Guidelines</a>
  </p>
  </div>

</div> <!-- end footer -->

</div><!-- end doc-content -->

</div> <!-- end body-content --> 

<script type="text/javascript">
init(); /* initialize android-developer-docs.js */
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-5831155-1");
pageTracker._trackPageview();
</script>

</body>
</html>



